// 项目中公共方法的文件
// 缓存
// Cookie 浏览器缓存 
// 存储量小 当用户清除浏览器历史记录则消失
// 浏览器的cookie是共享的 窗口与窗口的缓存数据是共享的 
// 1.cookie取名是要有特点 不然会和其他窗口的浏览器重名
// 2.存入的值 最好是String字符串类型 不能是引用数据类型
//            存引用数据类型我们只能JSON.stringify()转成string
// 3.存入的时间 缓存保存的时间一般为7天 ，最终解释权归产品经理所有
// 隐藏的面试题：怎么解决Cookie的浏览器跨域问题？
// 1.因为我们公司的vue项目中使用的是node的本地服务器所以我们是以服务器的方
// 式在和浏览器交互所以不存在跨域
// 2.当然了如果我们不是用node的服务器在写项目而是html文件开发项目我会让后端给我搭建一个
// (Tomcat)服务器我在上面开发也不会跨域
// 3、但是呢后端说没空帮我搭建 我会找度娘下载一个Nginx来开代理转发
// 引入下载的Cookie
import Cookies from "js-cookie";
import { systemcitylisttree } from "@/api/common";
// 存缓存 Cookie.set(存储的名字，存储的值，expires 存储的时间)
export const  SetCookie = (name ,Cookie)=>{//存储的名字 存储的值
    Cookies.set(name,Cookie,{expires:7})
}
// export 向外抛出
// 取缓存
//Cookies.get(获取缓存的名字) 返回的就是当前缓存的值
export const GetCookie = name =>Cookies.get(name);
// 删除缓存
// Cookies.remove(需要删除的缓存的名字)
export const RemoveCookie = (name)=>{
    Cookies.remove(name)
}

// localStoage 本地存储 存储量大 用户不能轻易删除 存储在计算机中 
// 因Cookie存储量较小 在需要存储大型数据放入缓存中时我们使用本地存储
// 存缓存window.localStoage.setItem（存入的名字 ，存入的数据 （不能是引用数据类型））
export const setStore = (name , obj)=>{
    window.localStorage.setItem(name , obj)
}
// 取缓存window.localStorage.getItem(要取的缓存名字)
export const getStore = name => window.localStorage.getItem(name);
// 删除指定缓存 window.localStoage.removeItem(删除的缓存名字)
export const removeStore = name =>{
    window.localStorage.removeItem(name)
}
// 清除用户电脑里面所有的本地缓存 （场景 ：退出登录） window.localStoage.clear()
export const getClear =()=>{
    window.localStorage.clear()
}
// sessionStorage 会话缓存在项目中会话缓存关闭了当前窗口就消失 所以不常用
export const setnullString = (resp)=>{
    // resp后端会回来的数据
    // 当前对象是null就将他变成
    if(!resp){
        resp={}
    }
    // 若不是null就是对象
    for(let i in resp){
        // 当前{} []
        // 基本数据类型
        if(resp[i] && typeof(resp[i])=="object"){
            setnullString(resp[i])
        }else{
            
            if(Object.is(resp[i],null)){
                resp[i]={}
            }else if(resp[i]=== "null"){
                resp[i] = ""
            }
            // null
        }
    }
    return resp
}
// 处理省市区数据
export  const  getProvince = async ()=>{
    // 如果省市区不在缓存就请求返回给vue文件
    // 如果在我就读缓存返回给vue文件
    if(getStore("getProvince")){
        return JSON.parse(getStore("getProvince"))
    }else{
         await  systemcitylisttree().then(res=>{
                    if(res.code==200){
                        setStore("getProvince",JSON.stringify(res.data))
                 
                        return res.data
                    }
            })
    }
    // systemcitylisttree().then(res=>{
    //     console.log(res)
    //     // 
    //     if(res.code==200){
    //         setStore("getProvince",JSON.stringify(res.data))
    //     }
    // })
}


